print("Bonjour, je vais bientôt programmer le jeu Pong !!!")
print()
Comment sont représentées les couleurs numériquement ?
Positionnement dans une fenêtre d'affichage.
#importation de la librairie pygame
import pygame
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = pygame.display.set_mode([500,500])
#remplissage du fond par la couleur définie
screen.fill([255,255,255])
#activer le rendu graphique (sans lequel rien n'est affiché)
pygame.display.flip()
Découvrir la documentation de Pygame...
#importation de la librairie pygame
import pygame
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = pygame.display.set_mode([500,500])
#remplissage du fond par la couleur définie
screen.fill([255,255,255])
# dessin d'un cercle avec les arguments suivant :
# screen : nom de la fenêtre
# [255,0,0] : couleur rouge
# [50,60] : position du centre x=50 et y=60
# 20 : rayon du cercle
# 0 : épaisseur du contour (0 pour aucun contour)
pygame.draw.circle(screen, [255,0,0] , [50,60], 20, 0)
#activer le rendu graphique (sans lequel rien n'est affiché)
pygame.display.flip()
cible.py
pygame.draw.circle()
pygame.display.flip()
L'utilisation de librairies en Python...
#importation de la librairie pygame
import pygame
from pygame.draw import *
from pygame.display import *
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode([500,500])
#remplissage du fond par la couleur définie
screen.fill([255,255,255])
# dessin d'un cercle avec les arguments suivant :
# screen : nom de la fenêtre
# [255,0,0] : couleur rouge
# [50,60] : position du centre x=50 et y=60
# 20 : rayon du cercle
# 0 : épaisseur du contour (0 pour aucun contour)
circle(screen, [255,0,0] , [50,60], 20, 0)
#activer le rendu graphique (sans lequel rien n'est affiché)
flip()
pygame.display.quit()
sys.exit()
sys
delay()
time
#importation des librairies pygame et sys
import pygame,sys
from pygame.draw import *
from pygame.display import *
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode([500,500])
#remplissage du fond par la couleur définie
screen.fill([255,255,255])
# dessin d'un cercle avec les arguments suivant :
# screen : nom de la fenêtre
# [255,0,0] : couleur rouge
# [50,60] : position du centre x=50 et y=60
# 20 : rayon du cercle
# 0 : épaisseur du contour (0 pour aucun contour)
circle(screen, [255,0,0] , [50,60], 20, 0)
#activer le rendu graphique (sans lequel rien n'est affiché)
flip()
pygame.time.delay(2000)#attendre deux secondes
pygame.display.quit()#fermer la fenêtre
sys.exit()#arrête le programme
Les différents types de variables que l'on peut rencontrer en programmation.
Attributs de la balle | Nom de la variable | Type de la variable |
---|---|---|
Attributs de la balle Couleur |
Nom de la variable c |
Type de la variable Liste de 3 entiers
|
Attributs de la balle Rayon |
Nom de la variable r |
Type de la variable
|
Attributs de la balle Position (abscisse) |
Nom de la variable x |
Type de la variable
|
Attributs de la balle Position (ordonnée) |
Nom de la variable y |
Type de la variable
|
Attributs de la balle Déplacement (abscisse) |
Nom de la variable dx |
Type de la variable
|
Attributs de la balle Déplacement (ordonnée) |
Nom de la variable dy |
Type de la variable
|
Attributs de la balle Forme |
Nom de la variable cercle (pour l'instant cette variable ne changera pas) |
Type de la variable --- |
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales #############################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
#attributs de la balle
[dx,dy] = [2, 1]#vecteur de déplacement entre deux frames consécutives
couleurFond = [255, 0, 0]#rouge
couleurBalle= [0,0,255]#bleu
[x,y]=[100,100] # position initiale de la balle
r=20 #rayon de la balle
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
#remplissage du fond par la couleur définie
screen.fill(couleurFond)
# dessin d'un cercle :
# 0 : dernier paramètre - épaisseur du contour (0 pour aucun contour)
circle(screen, couleurBalle , [x,y], r, 0) # voir documentation : https://www.pygame.org/docs/ref/draw.html
#activer le rendu graphique (sans lequel rien n'est affiché)
flip()
pygame.time.delay(2000)#attend deux secondes
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
Actuellement, l'image est tracée une seule fois. Il va falloir utiliser une boucle infinie modifiant le contenu de la fenêtre d'affichage 30 fois par seconde. Celà signifie que chaque itération de la boucle doit durer \frac{1}{30}-ème de seconde.
Cette boucle de jeu sera créee à l'aide d'une boucle "While" qui vous est présentée ici :
Boucle While
Présentation de la boucle while permettant de répéter des instructions de manière répétée...
dx
dy
x = x+dx y = y+dy
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
#attributs de la balle
[dx,dy] = [2, 1]#vecteur de déplacement entre deux frames consécutives
couleurFond = [255, 0, 0]#rouge
couleurBalle= [0,0,255]#bleu
[x,y]=[100,100] # position initiale de la balle
r=20 #rayon de la balle
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
while True:
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=x+dx
y=y+dy
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
Normalement, le résultat est le suivant :
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
#attributs de la balle
[dx,dy] = [2, 1]#vecteur de déplacement entre deux frames consécutives
couleurFond = [255, 0, 0]#rouge
couleurBalle= [0,0,255]#bleu
[x,y]=[100,100] # position initiale de la balle
r=20 #rayon de la balle
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=x+dx
y=y+dy
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
x = x+dx
y=y+dy
Attribution à x d'une valeur a | Ajouter a à une variable x | Retirer a à une variable x | Multiplier une variable x par a | Diviser une variable x par a |
---|---|---|---|---|
Attribution à x d'une valeur a
|
Ajouter a à une variable x
|
Retirer a à une variable x
|
Multiplier une variable x par a
|
Diviser une variable x par a
|
#déplacement de la balle :
x+=dx
y+=dy
dx
dx
si (la balle touche le bord)
alors
le sens de déplacement change de signe (sens opposé)
fin si
dx ← dx * (-1)
|
|
|
On considère que la balle entre en collision avec le bord lorsque la condition suivante est vérifiée : x+r >width
si la condition (x+r >width) est vraie alors
dx ← -dx
fin si
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=x+dx
y=y+dy
#test de collision bords droit
if x+r > width:
dx=-dx
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
On considère que la balle entre en collision avec le bord lorsque la condition suivante est vérifiée : (x-r \lt 0)
si la condition (x-r < 0) est vraie alors
dx ← -dx
fin si
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=x+dx
y=y+dy
#test de collision bord droit
if x+r > width:
dx=-d
#test de collision bord gauche
if x-r < 0:
dx=-dx
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
code source : pong1.3.py
Si l'une des conditionx+r > width
x-r < 0
dx = -dx
si (x+r > width) OU (x-r < 0) alors
dx ← -dx
fin si
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=x+dx
y=y+dy
#test de collision bords droite et gauche
if (x+r > width) or (x-r < 0):
dx=-dx
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=x+dx
y=y+dy
#test de collision bords droite et gauche
if (x+r > width) or (x-r < 0):
dx=-dx
#test de collision bords haut et bas
if (y+r > height) or (y-r < 0):
dy=-dy
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
supérieur | inférieur | supérieur ou égal | inférieur ou égal | égalité |
---|---|---|---|---|
supérieur
|
inférieur
|
supérieur ou égal
|
inférieur ou égal
|
égalité
|
addition | soustraction | multiplication | division | modulo (reste de la division euclidienne) |
---|---|---|---|---|
addition
|
soustraction
|
multiplication
|
division
|
modulo (reste de la division euclidienne)
|
Attribution à x d'une valeur a | Ajouter a à une variable x | Retirer a à une variable x | Multiplier une variable x par a | Diviser une variable x par a |
---|---|---|---|---|
Attribution à x d'une valeur a
|
Ajouter a à une variable x
|
Retirer a à une variable x
|
Multiplier une variable x par a
|
Diviser une variable x par a
|
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
circle(screen, couleurBalle , [x,y], r, 0)# dessin d'un cercle :
#déplacement de la balle :
x=(x+dx)%width
y=(y+dy)%height
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
On souhaite maintenant ajouter des balles au jeu. Chaque balle doit avoir 5 attributs (positions [x,y], vitesses [dx, dy], rayon r). Actuellement, Si on veut afficher 10 balles, cela revient à manipuler 5*10 = 50 variables différentes.
De même, chaque balle doit avoir des actions propres (afficher, avancer, test de collision) qu'il faudrait dupliquer.
Une méthode grossière consiste à copier chaque partie du code réalisé pour la première balle et à l’adapter pour chaque balle. Cela conduirait à un code très long, répétitif et fastidieux à lire.
Une des solutions pour remédier à ce problème est :Pour chaque itération de la boucle :
Afficher la balle
Avancer
Tester la collision
Fin pour
Il suffit pour cela d’incorporer les différentes lignes de codes écrites pour chaque actions dans la boucle while dans des fonctions indépendantes qui peuvent être appelées à n’importe quel instant.
De manière générale, une fonction peut avoir des paramètres en entrée et renvoyer des paramètres en sortie. Dans le cas présent, dans le cas d’une balle unique, on pourra définir les fonctions suivantes :afficher()
avancer()
testCollision()
fill(color)
circle(screen, couleurBalle , [x,y], r, 0)
afficher()
afficher()
def
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
#attributs de la balle
[dx,dy] = [3,1]#vecteur de déplacement entre deux frames consécutives
couleurFond = [255, 0, 0,10]#rouge
couleurBalle= [0,0,255]#bleu
[x,y]=[100,100] # position initiale de la balle
r=20 #rayon de la balle
# Nos fonctions d'actions
def afficher():
circle(screen, couleurBalle , [x,y], r, 0)
def avancer():
x=x+dx
y=y+dy
def testCollision():
#bords verticaux
if x+r > width or x-r < 0:
dx=-dx
#bords horizontaux
if y+r > height or y-r < 0:
dy=-dy
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
afficher()
#déplacement de la balle :
avancer()
#test de collision
testCollision()
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
C'est normal ! Celà signifie que la variable
x
afficher()
En effet, les variables utilisées dans chaque fonction ont par défaut une portée locale. Celà signifie qu'elle doivent être déclarée et utilisée à l'intérieur de la fonction. Elle n'existent pas en dehors de cette fonction.
Si une variable, déclarée a l'extérieur, doit être utilisée et modifiée à l'intérieur de la fonction il est nécessaire de la déclarée comme variable globale en début de fonction comme ceci :
global x,y,dx,dy
# Nos fonctions d'actions
def afficher():
global x,y,couleurBalle,r
circle(screen, couleurBalle , [x,y], r, 0)
def avancer():
global x,y,dx,dy
x=x+dx
y=y+dy
def testCollision():
global x,y,width,height,r,dx,dy
#bords verticaux
if x+r > width or x-r < 0:
dx=-dx
#bords horizontaux
if y+r > height or y-r < 0:
dy=-dy
testEvenement()
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
#attributs de la balle
[dx,dy] = [3,1]#vecteur de déplacement entre deux frames consécutives
couleurFond = [255, 0, 0,10]#rouge
couleurBalle= [0,0,255]#bleu
[x,y]=[100,100] # position initiale de la balle
r=20 #rayon de la balle
# Nos fonctions d'actions
def afficher():
circle(screen, couleurBalle , [x,y], r, 0)
def avancer():
x=x+dx
y=y+dy
def testCollision():
#bords verticaux
if x+r > width or x-r < 0:
dx=-dx
#bords horizontaux
if y+r > height or y-r < 0:
dy=-dy
def testEvenement():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
afficher()
#déplacement de la balle :
avancer()
#test de collision
testCollision()
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test d'arrêt du jeu
testEvenement()
La solution est de définir une liste de valeurs pour chaque attribut de la balle. Si nous manipulons N balles, chaque liste comportera N valeurs de même type. Chaque liste est alors considéré comme une variable unique qui permet de manipuler N valeurs.
Quel que soit le nombre N de balles, l’utilisation des listes permet alors de ne manipuler que 6 variables correspondant à chaque attribut d’une balle.
Pour découvrir les listes, nous allons utiliser la console de l'IDE :
L
>>> L = [20,10,15]
L
[]
>>> L[0]
20
0
>>> L[0] = "pong is the best game !!"
L
['pong is the best game!!', 10, 15]
L
Commande | Commentaire |
---|---|
Commande
|
Commentaire La fonction
|
Commande
|
Commentaire ajouter une valeur
|
Commande
|
Commentaire ajouter une valeur
|
Commande
|
Commentaire concaténer la liste
|
Commande
|
Commentaire retirer le i-ème élément de la liste
|
Commande
|
Commentaire retirer le dernier élément de la liste
|
Commande
|
Commentaire retirer la première occurence d'un élément ayant la même valeur que
|
Commande
|
Commentaire renverse l'ordre |
Commande
|
Commentaire réordonne les éléments de la liste |
Commande
|
Commentaire renvoie
|
Commande
|
Commentaire renvoie
|
L
42
3.141592
L[0]
>>> len(L)
>>> L.append(42)
>>> L.insert(1,3.141592)
>>> del(L[2])
L.remove(3.141592)
dx
dy
x
y
r
dx = [3,2,5] #vecteur de déplacement entre deux frames consécutives
dy = [-1, 1,3]
x = [100, 250, 50]
y = [30, 400, 100]
r = [20, 25, 15]
i
i
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
afficher(0)
afficher(1)
afficher(2)
#déplacement de la balle :
avancer(0)
avancer(1)
avancer(2)
#test de collision
testCollision(0)
testCollision(1)
testCollision(2)
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle= [0,0,255]#les balles ont la même couleur
#balle
dx = [3,2,5] #vecteur de déplacement entre deux frames consécutives
dy = [-1, 1,3]
x = [100, 250, 50]
y = [30, 400, 100]
r = [20, 25, 15]
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
afficher(0)
afficher(1)
afficher(2)
#déplacement de la balle :
avancer(0)
avancer(1)
avancer(2)
#test de collision
testCollision(0)
testCollision(1)
testCollision(2)
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
#balle
dx = [3,2,5] #vecteur de déplacement entre deux frames consécutives
dy = [-1, 1,3]
x = [100, 250, 50]
y = [30, 400, 100]
r = [20, 25, 15]
#tableau de couleur
couleurBalle1= [0,0,255]#les balles ont la même couleur
couleurBalle2= [255,0,255]#les balles ont la même couleur
couleurBalle3= [255,255,255]#les balles ont la même couleur
couleurBalle = [couleurBalle1,couleurBalle2,couleurBalle3]
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
afficher(0)
afficher(1)
afficher(2)
#déplacement de la balle :
avancer(0)
avancer(1)
avancer(2)
#test de collision
testCollision(0)
testCollision(1)
testCollision(2)
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
append
dx
dy
x
y
r
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
#initialisation des listes
dx.append(3)
dx.append(2)
dx.append(5)
dy.append(-1)
dy.append(1)
dy.append(3)
x.append(100)
x.append(250)
x.append(50)
y.append(100)
y.append(400)
y.append(100)
r.append(20)
r.append(25)
r.append(15)
random
randint()
random
from random import randint
valMin
valMax
randint(valMin, valMax)
dx
dy
x
y
r
couleurBalle
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
from random import randint
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle1= [0,0,255]#les balles ont la même couleur
dxMin=-5
dxMax=5
dyMin=-5
dyMax=5
rmax = 40
rmin = 10
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
#initialisation des listes
dx.append(randint(dxMin,dxMax))
dx.append(randint(dxMin,dxMax))
dx.append(randint(dxMin,dxMax))
dy.append(randint(dyMin,dyMax))
dy.append(randint(dyMin,dyMax))
dy.append(randint(dyMin,dyMax))
x.append(randint(rmax,width-rmax))
x.append(randint(rmax,width-rmax))
x.append(randint(rmax,width-rmax))
y.append(randint(rmax,height-rmax))
y.append(randint(rmax,height-rmax))
y.append(randint(rmax,height-rmax))
r.append(randint(rmin,rmax))
r.append(randint(rmin,rmax))
r.append(randint(rmin,rmax))
#tableau de couleur (dégradé de bleu)
couleurBalle1= [0,0,randint(0,255)]
couleurBalle2= [0,0,randint(0,255)]
couleurBalle3= [0,0,randint(0,255)]
couleurBalle = [couleurBalle1,couleurBalle2,couleurBalle3]
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
#afficher la balle :
afficher(0)
afficher(1)
afficher(2)
#déplacement de la balle :
avancer(0)
avancer(1)
avancer(2)
#test de collision
testCollision(0)
testCollision(1)
testCollision(2)
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
for
for i in range(0,5):
print("l'indice vaut : ", i )
l'indice vaut : 0 l'indice vaut : 1 l'indice vaut : 2 l'indice vaut : 3 l'indice vaut : 4
i
i=0
i=4
range()
list(range(0,5))
[0, 1, 2, 3, 4]
range
list(range(2,5))
list(range(0,100,10))
list(range(10,0,-1))
L=["Marseille","New York","Alger","Tokyo","Dakar"]
for ville in L:
print("J'adore la ville de ", ville )
J'adore la ville de Marseille J'adore la ville de New York J'adore la ville de Alger J'adore la ville de Tokyo J'adore la ville de Dakar
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
from random import randint
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle1= [0,0,255]#les balles ont la même couleur
rmax = 40
rmin = 10
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
couleurBalle = []
#initialisation des listes
for i in range(0,3):
dx.append(randint(-5,5))
dy.append(randint(-5,5))
x.append(randint(width-rmax,height-rmax))
y.append(randint(width-rmax,height-rmax))
r.append(randint(rmin,rmax))
#tableau de couleur (dégradé de bleu)
couleurBalle.append([0,0,randint(0,255)])
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
for i in range(0,3):
#afficher la balle :
afficher(i)
#déplacement de la balle :
avancer(i)
#test de collision
testCollision(i)
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
N
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
from random import randint
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle1= [0,0,255]#les balles ont la même couleur
rmax = 40
rmin = 10
N = 10 #nb de balles
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
couleurBalle = []
#initialisation des listes
for i in range(0,N):
dx.append(randint(-5,5))
dy.append(randint(-5,5))
x.append(randint(width-rmax,height-rmax))
y.append(randint(width-rmax,height-rmax))
r.append(randint(rmin,rmax))
#tableau de couleur (dégradé de bleu)
couleurBalle.append([0,0,randint(0,255)])
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
for i in range(0,N):
#afficher la balle :
afficher(i)
#déplacement de la balle :
avancer(i)
#test de collision
testCollision(i)
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
rx = 20
ry = height/2
dry = 5
rh = 100
rw = 20
rcolor = [255, 255, 255]
pygame.draw.rect()
rect(screen, rcolor, [rx, ry, rw, rh])
afficher_raquette()
#importation de la librairie pygame
import pygame,sys
from pygame.draw import *
from pygame.display import *
from random import randint
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle1= [0,0,255]#les balles ont la même couleur
rmax = 40
rmin = 10
N = 10 #nb de balles
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
couleurBalle = []
#déclaration des attributs de la raquette
rx=20
ry=height/2
dry=5
rh=100
rw=20
rcolor=[255,255,255]
#initialisation des listes
for i in range(0,N):
dx.append(randint(-5,5))
dy.append(randint(-5,5))
x.append(randint(width-rmax,height-rmax))
y.append(randint(width-rmax,height-rmax))
r.append(randint(rmin,rmax))
#tableau de couleur (dégradé de bleu)
couleurBalle.append([0,0,randint(0,255)])
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
#fonctions de la raquette
def afficher_raquette():
rect(screen, rcolor, [rx, ry, rw, rh])
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
for i in range(0,N):
#afficher la balle :
afficher(i)
#déplacement de la balle :
avancer(i)
#test de collision
testCollision(i)
afficher_raquette()
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
from pygame.locals import *
KEYDOWN
QUIT
K_UP
pygame.KEYDOWN
pygame.QUIT
pygame.K_UP
testEvenements()
pygame.KEYDOWN
testEvenement()
def testEvenements():
for event in pygame.event.get():
if event.type == QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
if event.type == KEYDOWN:
print("Une touche vient d'être pressée")
pygame.key.get_pressed()
pygame.key.get_pressed()
K_UP
K_DOWN
bouger_raquette()
def bouger_raquette():
global ry, dry
if pygame.key.get_pressed()[K_UP]:
#déplacer vers le haut
....
if pygame.key.get_pressed()[K_DOWN]:
#déplacer vers le bas
....
bouge_raquette()
KEYDOWN
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
if event.type == KEYDOWN:
bouger_raquette()
def bouger_raquette():
global ry, dry
if pygame.key.get_pressed()[K_UP]:
ry-=dry
if pygame.key.get_pressed()[K_DOWN]:
ry+=dry
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#vérifier les interactions clavier toutes les 10ms
pygame.key.set_repeat(10, 10)
#importation de la librairie pygame
from pygame.locals import *
import pygame,sys
from pygame.draw import *
from pygame.display import *
from random import randint
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle1= [0,0,255]#les balles ont la même couleur
rmax = 40
rmin = 10
N = 10 #nb de balles
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
couleurBalle = []
#déclaration des attributs de la raquette
rx=20
ry=height/2
dry=2
rh=100
rw=20
rcolor=[255,255,255]
#initialisation des listes
for i in range(0,N):
dx.append(randint(-5,5))
dy.append(randint(-5,5))
x.append(randint(width-rmax,height-rmax))
y.append(randint(width-rmax,height-rmax))
r.append(randint(rmin,rmax))
#tableau de couleur (dégradé de bleu)
couleurBalle.append([0,0,randint(0,255)])
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
def testEvenements():
for event in pygame.event.get():
if event.type == QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
if event.type == KEYDOWN:
bouger_raquette()
#fonctions de la raquette
def afficher_raquette():
rect(screen, rcolor, [rx, ry, rw, rh])
def bouger_raquette():
global ry, dry
if pygame.key.get_pressed()[K_UP]:
ry-=dry
if pygame.key.get_pressed()[K_DOWN]:
ry+=dry
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#vérifier les interactions clavier toutes les 10ms
pygame.key.set_repeat(10, 10)
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
for i in range(0,N):
#afficher la balle :
afficher(i)
#déplacement de la balle :
avancer(i)
#test de collision
testCollision(i)
afficher_raquette()
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
testCollision(i)
i
and
(ry < y[i]) and (y[i] < (ry + rh)) and ((x[i] – r[i]) < (rx+rw))
testCollision
def testCollision(i):
global x,y,width,height,r,dx,dy,ry,rh,rw
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] < 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
#rebond raquette :
if (ry < y[i]) and (y[i] < (ry + rh)) and ((x[i] - r[i]) < (rx + rw)):
dx[i]=-dx[i]
#importation de la librairie pygame
from pygame.locals import *
import pygame,sys
from pygame.draw import *
from pygame.display import *
from random import randint
# variables globales ##########################################################"
size = width, height = 500, 500 # taille de la fenêtre d'affichage
couleurFond = [255, 0, 0,10]#rouge
couleurBalle1= [0,0,255]#les balles ont la même couleur
rmax = 40
rmin = 10
N = 10 #nb de balles
# déclaration des listes vides des attributs des balles
dx = [] #vecteur de déplacement entre deux frames consécutives
dy = []
x = []
y = []
r = []
couleurBalle = []
#déclaration des attributs de la raquette
rx=20
ry=height/2
dry=2
rh=100
rw=20
rcolor=[255,255,255]
#initialisation des listes
for i in range(0,N):
dx.append(randint(-5,5))
dy.append(randint(-5,5))
x.append(randint(width-rmax,height-rmax))
y.append(randint(width-rmax,height-rmax))
r.append(randint(rmin,rmax))
#tableau de couleur (dégradé de bleu)
couleurBalle.append([0,0,randint(0,255)])
# Nos fonctions d'actions
def afficher(i):
global x,y,couleurBalle,r
circle(screen, couleurBalle[i] , [x[i],y[i]], r[i], 0)
def avancer(i):
global x,y,dx,dy
x[i]=x[i]+dx[i]
y[i]=y[i]+dy[i]
def testCollision(i):
global x,y,width,height,r,dx,dy,ry,rh,rw
#bords verticaux
if x[i]+r[i] > width or x[i]-r[i] 0:
dx[i]=-dx[i]
#bords horizontaux
if y[i]+r[i] > height or y[i]-r[i] < 0:
dy[i]=-dy[i]
if (ry < y[i]) and (y[i] < (ry + rh)) and ((x[i] - r[i]) < (rx + rw)):
dx[i]=-dx[i]
def testEvenements():
for event in pygame.event.get():
if event.type == pygame.QUIT:#si clique sur la croix quitter
pygame.display.quit()#ferme la fenêtre
sys.exit()#arrête le programme
if event.type == KEYDOWN:
bouger_raquette()
#fonctions de la raquette
def afficher_raquette():
rect(screen, rcolor, [rx, ry, rw, rh])
def bouger_raquette():
global ry, dry
if pygame.key.get_pressed()[K_UP]:
ry-=dry
if pygame.key.get_pressed()[K_DOWN]:
ry+=dry
#lancement des fonctionnalités de la librairie pygame
pygame.init()
#vérifier les interactions clavier toutes les 10ms
pygame.key.set_repeat(10, 10)
#affichage d'une fenêtre de dessin de largeur 500 pixels et de hauteur 500 pixels
screen = set_mode(size)
while True:
#remplissage du fond par la couleur blanche
screen.fill(couleurFond)
for i in range(0,N):
#afficher la balle :
afficher(i)
#déplacement de la balle :
avancer(i)
#test de collision
testCollision(i)
afficher_raquette()
flip()#activer le rendu graphique
pygame.time.delay(15)#une image toute les 15 ms
#test evenements, arrêt de jeu :
testEvenements()
Le pong réalisé est ainsi jouable. Il ne s'agit bien sûr pas d'un jeu finalisé. Il nous aura permis d'introduire toutes les notions fondamentales de programmation python ainsi que des morceaux de code réutilisables pour d'autres types de projets.
Il est possible de poursuivre et d'améliorer le jeu :
pygame.Rect